/**
 * 数据验证工具函数
 */

/**
 * 验证手机号
 * @param {string} phone 手机号
 * @returns {boolean} 是否有效
 */
export function isValidPhone(phone) {
  const phoneRegex = /^1[3-9]\d{9}$/
  return phoneRegex.test(phone)
}

/**
 * 验证邮箱
 * @param {string} email 邮箱地址
 * @returns {boolean} 是否有效
 */
export function isValidEmail(email) {
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
  return emailRegex.test(email)
}

/**
 * 验证身份证号
 * @param {string} idCard 身份证号
 * @returns {boolean} 是否有效
 */
export function isValidIdCard(idCard) {
  const idCardRegex = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
  return idCardRegex.test(idCard)
}

/**
 * 验证密码强度
 * @param {string} password 密码
 * @returns {object} 验证结果 { valid: boolean, strength: number, message: string }
 */
export function validatePassword(password) {
  if (!password) {
    return { valid: false, strength: 0, message: '密码不能为空' }
  }
  
  if (password.length < 6) {
    return { valid: false, strength: 1, message: '密码长度至少6位' }
  }
  
  let strength = 0
  
  // 包含小写字母
  if (/[a-z]/.test(password)) strength++
  
  // 包含大写字母
  if (/[A-Z]/.test(password)) strength++
  
  // 包含数字
  if (/\d/.test(password)) strength++
  
  // 包含特殊字符
  if (/[!@#$%^&*(),.?\":{}|<>]/.test(password)) strength++
  
  // 长度大于8位
  if (password.length >= 8) strength++
  
  const messages = [
    '密码过于简单',
    '密码强度较弱',
    '密码强度一般',
    '密码强度较好',
    '密码强度很好',
    '密码强度极好'
  ]
  
  return {
    valid: strength >= 2,
    strength,
    message: messages[strength]
  }
}

/**
 * 验证URL
 * @param {string} url URL地址
 * @returns {boolean} 是否有效
 */
export function isValidUrl(url) {
  try {
    new URL(url)
    return true
  } catch {
    return false
  }
}

/**
 * 验证IP地址
 * @param {string} ip IP地址
 * @returns {boolean} 是否有效
 */
export function isValidIP(ip) {
  const ipRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/
  return ipRegex.test(ip)
}

/**
 * 验证数字范围
 * @param {number} value 数值
 * @param {number} min 最小值
 * @param {number} max 最大值
 * @returns {boolean} 是否在范围内
 */
export function isInRange(value, min, max) {
  return value >= min && value <= max
}

/**
 * 验证经纬度
 * @param {number} lng 经度
 * @param {number} lat 纬度
 * @returns {boolean} 是否有效
 */
export function isValidCoordinate(lng, lat) {
  return lng >= -180 && lng <= 180 && lat >= -90 && lat <= 90
}